from mpmath import mp   #从mpmath库导入mp模块
import streamlit as st   #导入streamlit库
import numpy as np   #导入numpy库
import matplotlib.pyplot as plt   #导入matplotlib库
with st.sidebar:   #创建一个网页上在在网页上创建一个滑动框
    num_digits = st.slider('Number of decimal digits:',min_value=10000,max_value=100000,step=10000)   #创建一个从10000到100000的滑动条，每次滑动单位为10000，num_digits记录当前滑动条的值
mp.dps = num_digits + 2   #设置显计算精度
pi_digits = mp.pi   #为pi_digits赋值为pi
pi_digits = str(pi_digits)[2:]   #为pi_digits取值为pi的小数部位
pi_digits_list = [int(x) for x in pi_digits]   #把pi的小数位都存入一个列表
pi_digits_array = np.array(pi_digits_list)   #为pi_digits_array赋值为pi_digits_list
counts = np.bincount(pi_digits_array)   #统计0-9在pi里出现的次数
fig, ax = plt.subplots()   #设置fig,ax为画布
ax.barh(range(10), counts, align='center',edgecolor=[0.6, 0.6, 0.6])   #创建一个水平条形图，居中以及条的边框颜色
ax.spines['top'].set_visible(False)   #隐藏上方边框
ax.spines['right'].set_visible(False)   #隐藏右侧边框
ax.set_xlabel('Count')   #设置x轴表示统计的数量
ax.set_ylabel('Digit, 0~9')   #设置y轴表示统计的数字
plt.yticks(range(10))   #在y轴上打印0-9
st.pyplot(fig)   #绘出fig